package com.link.base.base.reception.service;

import com.link.base.base.reception.model.*;
import com.link.core.basic.service.BasicService;
import com.link.base.base.reception.model.*;

import java.util.List;
import java.util.Map;

/**
 * @author unknown
 * @date unknown
 * @comments 接待-导购助手app使用
 */
public interface ReceptionService extends BasicService<Reception> {
    /**
     * 客户提交下一步
     *
     * @author lizt
     * @param qo
     * @throws  Exception
     * 2017年3月8日
     */
    void optyCommit(Reception qo) throws Exception;

    /**
     * 通过ID查询客户信息、测量信息及意向产品
     *
     * @author lizt
     * @param qo
     * @return 接待
     * @throws  Exception
     * 2017年3月9日
     */
    Reception queryMoreByOptyId(Reception qo) throws Exception;

    /**
     * 通过商机id查询测量信息
     *
     * @author ouyangzhenqiang
     * @param parentId
     * @return 测量信息
     * @throws Exception
     * 2017年3月16日
     */
    List<MeasureInfo> getOptyMeasure(Long parentId) throws Exception;

    /**
     * 提交测量信息
     *
     * @author ouyangzhenqiang
     * @param list 测量信息
     * @throws Exception
     * 2017年3月17日
     */
    void commitOptyMeasure(ListOfMeasure list) throws Exception;

    /**
     * 查询一条时间进度记录
     *
     * @author lizt
     * @param qs
     * @return 时间进度记录
     * @throws Exception
     * 2017年3月20日
     */
    GuideSchedule queryScheduleById(GuideSchedule qs) throws Exception;

    /**
     * 根据时间进度生成任务
     *
     * @author lizt
     * @param guideSchedule
     * @return 时间进度生成任务
     * @throws Exception
     * 2017年8月18日
     */
    GuideSchedule generateTask(GuideSchedule guideSchedule) throws Exception;

    /**
     * 根据商机id查询意向产品列表
     *
     * @author : LiQun
     * @param record 意向产品
     * @return 意向产品列表
     * @throws Exception 异常
     * @date : 下午2:40 2018/4/12
     */
    List<OptyIntendProduct> queryIntendProdByOptyId(OptyIntendProduct record) throws Exception;

    /**
     * 查询离店原因
     *
     * @param leaveStoreReason
     * @return 离店原因
     * @throws Exception
     */
    List<LeaveStoreReason> queryLeaveStoreReasonList(LeaveStoreReason leaveStoreReason) throws Exception;

    /**
     * 根据id查询跟进
     * 1.获取文字跟进-QD_FOLLOW_UP表
     * 2.获取测量跟进-LNK_MEASURE_INFO表
     * 3.获取任务跟进-LNK_MOBILE_WORK_PLAN表
     *
     * @author LiQun
     * @param entity
     * @return map
     * @throws Exception
     * @date 下午3:15 2018/5/2
     */
    Map<String, Object> queryFollowUpByOptyId(Reception entity) throws Exception;

    /**
     * 查询待接待列表 - 根据门店Id
     *
     * @author LiQun
     * @param reception 接待对象
     * @return 待接待列表
     * @throws Exception 异常信息
     * @date 上午11:55 2018/5/4
     */
    List<WaitReception> queryWaitForReceptionsPage(WaitReception reception) throws Exception;

    /**
     * 查询待接列表总数 - 根据门店Id
     *
     * @author ouyangzhenqiang
     * @date 2018/11/30
     * @param reception
     */
    int queryWaitReceptionListNum(WaitReception reception) throws Exception;

    /**
     * 根据接待头Id查询待接待列表
     *
     * @author LiQun
     * @param reception 接待头
     * @return 接待客户列表
     * @throws Exception 一次
     * @date 下午1:59 2018/5/4
     */
    List<WaitReceptionList> queryReceptionListByHeadId(WaitReceptionList reception) throws Exception;

    /**
     * 根据接待头查询接待头本身及其子接待列表，返回以接待为头的头行完整对象，用于新形式的接待提示框
     *
     * @author ouyangzhenqiang
     * @date 2018/12/1
     * @param reception
     */
    WaitReception queryReceptionByHeadId(WaitReception reception) throws Exception;

    /**
     * 根据待接待头Id查询待接待列表匹配度最高的一条记录，并获取其对应person的相关信息
     *
     * @author ouyangzhenqiang
     * @date 2018/12/1
     * @param waitReception
     * @return
     */
    WaitReception queryTopConfidenceAccount(WaitReception waitReception) throws Exception;
}
